<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>回调函数形式的ref</title>
    <meta name="description" content="">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="">
</head>
<body>

    <div id="react"> </div>
    <!--准备好一个容器-->
    <div id="test"></div>
    <!--引入react核心库,核心库必须先引入-->
    <script type="text/javascript" src="./js/react.development.js"></script>
    <!--引入react-dom, 用于支持react操作DOM-->
    <script type="text/javascript" src="./js/react-dom.development.js"></script>
    <!--引入babel,用于将jsx转为js-->
    <script type="text/javascript" src="./js/babel.min.js"></script>

    <!-- 引入prop-types，用于对组件标签属性进行限制 -->
    <script type="text/javascript" src="./js/prop-types.js"></script>

    <script type="text/babel">
        class Wcomponent extends React.Component{
          //定义状态state
           state ={isHot:false}          
            changeWeather=()=>{
                console.log(this) 
                const {isHot} =this.state //解构
                //更新状态,setState是React原型上的方法，用于更新状态数据
                this.setState({isHot:!isHot})
            }
            render() {
                //获取初始状态数据，解构
                const {isHot} = this.state
                return(
                    <div>
                        <h2 ref={(a)=>{this.ht =a;console.log('更新状态数据时ref执行次数',a)}}  onClick={this.changeWeather}>天气{isHot ? '冷':'热'}</h2>                      
                    </div>
                )  
            }
        }
        //渲染组件
        ReactDOM.render(<Wcomponent/>,document.getElementById("react"))

        //总结:每更新一次状态，ref中的回调函数被react执行2次，
        //在更新状态时，react在调用ref中的回调函数时，传了一个null ，对ref获取的真实DOM节点做了一次清空，
        //然后才传入当前节点，执行回调，获取当前节点的真实DOM
    </script>
    <style>
        .spacing {
            margin: 15px;
        }
    </style>
</body>
</html>